#!/bin/bash

# Flutter Build APK 双击执行脚本
# 作用：构建 Flutter 项目的 Android APK 安装包

echo "📱 开始构建 Flutter APK..."
echo "======================================"

# 获取脚本所在目录（项目根目录）
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$SCRIPT_DIR"

echo "📁 当前目录: $(pwd)"
echo "⏰ 开始时间: $(date)"

# 检查是否为 Flutter 项目
if [ ! -f "pubspec.yaml" ]; then
    echo "❌ 错误：当前目录不是 Flutter 项目！"
    echo "请确保脚本位于 Flutter 项目根目录。"
    read -p "按任意键退出..." -n1 -s
    exit 1
fi

echo "✅ 检测到 Flutter 项目"

# 显示项目信息
if command -v grep >/dev/null 2>&1; then
    PROJECT_NAME=$(grep "^name:" pubspec.yaml | cut -d' ' -f2)
    PROJECT_VERSION=$(grep "^version:" pubspec.yaml | cut -d' ' -f2)
    echo "📄 项目名称: $PROJECT_NAME"
    echo "🏷️  项目版本: $PROJECT_VERSION"
fi

# 检查 Android 目录是否存在
if [ ! -d "android" ]; then
    echo "❌ 错误：未找到 android 目录！"
    echo "请确保项目支持 Android 平台。"
    read -p "按任意键退出..." -n1 -s
    exit 1
fi

echo "✅ 检测到 Android 平台支持"
echo ""

# 询问构建模式（3秒后自动选择Release）
echo "🔍 请选择构建模式："
echo "   1. 🚀 Release 模式 (生产环境，推荐)"
echo "   2. 🐛 Debug 模式 (开发调试)"
echo "   3. 📊 Profile 模式 (性能分析)"
echo ""
echo "⏰ 3秒后自动选择 Release 模式，或立即输入选择..."
read -t 3 -p "请输入选择 (1-3): " BUILD_MODE
if [ $? -ne 0 ]; then
    BUILD_MODE="1"
    echo ""
    echo "⚡ 自动选择 Release 模式"
fi

case $BUILD_MODE in
    2)
        BUILD_MODE="debug"
        MODE_DESC="Debug 调试模式"
        ;;
    3)
        BUILD_MODE="profile"
        MODE_DESC="Profile 性能分析模式"
        ;;
    *)
        BUILD_MODE="release"
        MODE_DESC="Release 发布模式"
        ;;
esac

echo ""
echo "🎯 构建模式: $MODE_DESC"
echo ""

# 显示构建信息
echo "🔍 即将执行的操作："
echo "   1. 🧹 清理之前的构建文件"
echo "   2. 📦 获取最新依赖包"
echo "   3. 🏗️  构建 APK ($MODE_DESC)"
echo ""

echo "🚀 开始自动构建..."
echo ""

# 步骤 1: 清理项目
echo "🧹 步骤 1/3: 正在清理项目..."
echo "----------------------------------------"
flutter clean
if [ $? -eq 0 ]; then
    echo "✅ 项目清理完成"
else
    echo "❌ 项目清理失败"
    read -p "按任意键退出..." -n1 -s
    exit 1
fi

echo ""

# 步骤 2: 获取依赖
echo "📦 步骤 2/3: 正在获取依赖包..."
echo "----------------------------------------"
flutter pub get
if [ $? -eq 0 ]; then
    echo "✅ 依赖包获取完成"
else
    echo "❌ 依赖包获取失败"
    read -p "按任意键退出..." -n1 -s
    exit 1
fi

echo ""

# 步骤 3: 构建 APK
echo "🏗️  步骤 3/3: 正在构建 APK ($MODE_DESC)..."
echo "----------------------------------------"
echo "⚠️  注意：APK 构建可能需要几分钟时间，请耐心等待..."
echo ""

# 根据模式执行不同的构建命令
if [ "$BUILD_MODE" = "release" ]; then
    flutter build apk --release
elif [ "$BUILD_MODE" = "debug" ]; then
    flutter build apk --debug
else
    flutter build apk --profile
fi

# 检查构建结果
if [ $? -eq 0 ]; then
    echo ""
    echo "🎉 APK 构建成功！"
    echo "======================================"
    
    # 查找生成的 APK 文件
    APK_DIR="build/app/outputs/flutter-apk"
    if [ -d "$APK_DIR" ]; then
        echo "📂 APK 文件位置:"
        find "$APK_DIR" -name "*.apk" -exec ls -lh {} \; | while read line; do
            echo "   $line"
        done
        
        echo ""
        echo "🔄 重命名 APK 文件（添加时间戳）..."
        
        # 生成时间戳和项目信息
        TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
        PROJECT_NAME=$(grep "^name:" pubspec.yaml | cut -d' ' -f2 2>/dev/null || echo "app")
        PROJECT_VERSION=$(grep "^version:" pubspec.yaml | cut -d' ' -f2 2>/dev/null | cut -d'+' -f1 || echo "1.0.0")
        
        # 构建模式标识（英文简称）
        case $BUILD_MODE in
            "debug")
                MODE_TAG="debug"
                ;;
            "profile")
                MODE_TAG="profile"
                ;;
            *)
                MODE_TAG="release"
                ;;
        esac
        
        # 重命名所有APK文件
        find "$APK_DIR" -name "*.apk" | while read apk_file; do
            file_dir=$(dirname "$apk_file")
            file_name=$(basename "$apk_file")
            file_ext="${file_name##*.}"
            file_base="${file_name%.*}"
            
            # 新文件名格式：项目名_版本号_构建模式_时间戳.apk
            new_name="${PROJECT_NAME}_v${PROJECT_VERSION}_${MODE_TAG}_${TIMESTAMP}.${file_ext}"
            new_path="${file_dir}/${new_name}"
            
            # 执行重命名
            if mv "$apk_file" "$new_path" 2>/dev/null; then
                echo "   ✅ $file_name → $new_name"
            else
                echo "   ⚠️  $file_name (重命名失败)"
            fi
        done
        
        echo ""
        echo "📱 最终 APK 文件:"
        find "$APK_DIR" -name "*.apk" | while read apk_file; do
            file_size=$(ls -lh "$apk_file" | awk '{print $5}')
            file_name=$(basename "$apk_file")
            echo "   📦 $file_name ($file_size)"
        done
        
        echo ""
        echo "💡 使用说明:"
        echo "   1. 将 APK 文件传输到 Android 设备"
        echo "   2. 在设备上启用 '未知来源' 安装"
        echo "   3. 点击 APK 文件进行安装"
        
        # 自动打开APK文件夹
        echo ""
        echo "🚀 自动打开 APK 文件夹..."
        open "$APK_DIR"
        
    else
        echo "⚠️  警告：未找到 APK 输出目录"
        echo "请检查构建过程是否完全成功"
    fi
    
else
    echo ""
    echo "❌ APK 构建失败！"
    echo "======================================"
    echo "可能的原因："
    echo "   - Android SDK 未正确配置"
    echo "   - Java/Kotlin 环境问题"
    echo "   - 项目配置错误"
    echo "   - 网络连接问题"
    echo ""
    echo "💡 建议操作："
    echo "   1. 运行 'flutter doctor' 检查环境"
    echo "   2. 检查 android/app/build.gradle 配置"
    echo "   3. 清理项目后重新尝试"
fi

echo ""
echo "⏰ 完成时间: $(date)"
echo "======================================"

# 等待用户按键后关闭
echo ""
echo "按任意键关闭窗口..."
read -n1 -s
